"""
Простая демонстрация работы собственного алгоритма и алгоритма scikit-learn.
"""

import ml_2i
import numpy as np
from sklearn.linear_model import LinearRegression
import list_usd_rus

#list_usd_rus.new_data(9) # Запрос данных о курсе доллара за
# последние 9 лет

delit = 30 # На сколько дней предсказание
fllst = list_usd_rus.lst() # Список цен за год
trlst = fllst[:len(fllst)-200] # Из них используются для тренировки

# Формирование тренировочных примеров #
tr_ex4 = ml_2i.convert_to_trx_v4(trlst, delit)
#-----#

# Формирование тренировочных примеров #
def convert_to_trx_sci(data, delit):
	# tr_ex = [data[0], []]
	tr_exh1 = []
	tr_exh2 = []
	for ex in range(len(data) - delit * 2 + 1):
		adlst = [data[ex:ex + delit], data[ex + delit:ex + delit * 2]]
		p100 = ml_2i.medium_arifmetical(adlst[0] + adlst[1])

		# print(adlst, p100)
		adlst = ml_2i.preobr_to_perc_v4(adlst, p100)
		try:
			tr_exh1+=adlst[0]
			tr_exh2+=adlst[1]# [1]
		except Exception as e:
			print(e)
	return [tr_exh1,tr_exh2]
tr_ex = convert_to_trx_sci(trlst, delit)
#-----#

# Тренировка #
model4 = ml_2i.new_Model()
model4.training_examples = tr_ex4
model4.start_training_v4()
#---#

# Тренировка #
x = np.array(tr_ex[0]).reshape((-1, 1))
y = np.array(tr_ex[1])
model = LinearRegression()
model.fit(x, y)
#---#

# Предсказание #
from_dt = 149 # С какого идентификатора берём за данные input
from_dt = len(fllst)-from_dt
to_predict = fllst[from_dt:from_dt+delit] # Форммирование input данных
wlb = fllst[from_dt+delit-1:from_dt+delit*2] # что должно быть
p100 = ml_2i.medium_arifmetical(to_predict)

inpt4, out4 = model4.new_prediction_v4(to_predict) # Предсказание
miout4 = ml_2i.medium_smooth_graph(inpt4, out4) # Сглаживание
miout4 = ml_2i.medium_smooth_graph(inpt4, miout4) # Сглаживание

inpt = to_predict
ed = np.array(ml_2i.preobr_to_perc_v4([to_predict, []], p100)[0]).reshape((-1, 1))
#print(ed)
re = list(model.predict(ed))
res = []
for el in re:
	res.append(p100/100*el)
#-----#


# Демонстрация #

res.reverse()
res.append(inpt[len(inpt)-1])
res.reverse()

miout4.reverse()
miout4.append(inpt4[len(inpt4)-1])
miout4.reverse()

"""
ml_2i.show_graph(
	[range(delit), inpt, "Input"],
	[range(len(inpt)-1,len(inpt)+len(res)-1), res, "Scikit-Learn"],
	[range(len(inpt)-1,len(inpt)+len(miout4)-1), miout4, "v4+MSG"],
	[range(len(inpt)-1,len(inpt)+len(wlb)-1), wlb, "Will be"])
"""
ml_2i.show_graph(
	[range(delit), inpt, "Input"],
	[range(len(inpt)-1,len(inpt)+len(res)-1), res, "Scikit-Learn"],
	[range(len(inpt)-1,len(inpt)+len(wlb)-1), wlb, "Will be"],
	[range(len(inpt)-1,len(inpt)+len(miout4)-1), miout4, "v4+MSG"])
#-end-#